function Controller(myName){
    
    this.objName=myName;
    this.initialize=function() {
        try{
            graphman.setCallbackCheckboxes(this.objName+".callbackCheckboxes()");
            graphman.setCallbackPath(this.objName+".showCurrentPath()");
            //devo passare l'oggetto che contiene il metodo di callback
            //o callBach http://en.wikipedia.org/wiki/Johann_Sebastian_Bach che dir si voglia
            poiman.getCategoryList(this.callbackCategoriesLoaded);
            graphman.writeTimeSelection();
            graphman.writePhrase();
            evtman.addExternalEventSource(alberghi);
            graphman.addExternalGraphicsSource(alberghi);
            graphman.drawExternalGraphicsSources("ctrl.reloadEvents();");
            graphman.redrawNewPathDiv();
            this.reloadEvents();
            //alert(this.objName);
            //decommentare
            pathman.getPathList(this.callbackPathsReloaded);
        //TODO: cercare un modo più elegante di fare questo, inoltre qui c'è da mettere un callback, se chiamato significa che abbiamo finito di caricare le categorie
        } catch(err){
            alert("errore in creazione del controller "+err.toString());
        }
    }
    
    /**
     * funzione da passare come callback al metodo getCategoryList, viene
     * chiamata quando il POIManager finisce di caricare le categorie
     */
    this.callbackCategoriesLoaded=function(){

        graphman.drawCategoriesList(poiman.categoryList);
        //me ne sto e displayo le mappe
        mapman.constant_divDisplayMap=graphman.constant_divDisplayMap;
        mapman.displayMap();
    }

    this.callbackCheckboxes=function(){
        graphman.unselectAllPaths();
        this.reloadEvents();
    }

    this.callbackEventsReloaded=function(){
        //alert("ini");

        var list=evtman.getEventsToShow();
        mapman.viewPlaces(list);
    }

    /**
     * Funzione che mostra la lista dei path con eventuali radio button
     */
    this.callbackPathsReloaded=function(){
        //TODO: prima di caricare i path accertarsi che ci siano tutti gli eventi
        graphman.drawPathList(pathman.getLoadedPathList());
    }

    this.showCurrentPath=function(){
        var selectedPath=graphman.getSelectedPath();
        if(selectedPath!=null)
            pathman.getPathFromId(selectedPath, this.loadEventsForPath);
        else{
            //alert('null');
            pathman.pathToShow=null;
            mapman.hideAllPaths();
            this.reloadEvents();
        }
    }

    /**
     * Permette di caricare tutti gli eventi da mostrare per un determinato
     * percorso
     */
    this.loadEventsForPath=function(){
        evtman.loadEventsFromPath(pathman.pathToShow, function(){
            mapman.viewPathFromEvts();
            ctrl.reloadEvents();
        });
    }

    this.reloadEvents=function(){
        var cats=graphman.getCheckedCheckboxes();//funzia: array di categorie
        var tempo=graphman.getTime();
        graphman.closeActiveEvtWin();
        //passo callback per quando gli eventi sono caricati: this.callbackEventsReloaded
        if(pathman.getPathToShow()!=null)
            evtman.loadEventsFromPath(pathman.getPathToShow(), this.callbackEventsReloaded);
        else
            evtman.loadEvents(cats, tempo[0], tempo[1], tempo[2], null,this.callbackEventsReloaded);
    }
    /**
     * Metodo che permette l'inizializzazione degli eventi
     */
    this.initialize();
}